<article>
    <h1><?php echo $GLOBALS['title'] ?></h1>
    <p>正则表达式（Regular Expression，在代码中常简写为regex、regexp或RE）是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里，正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。 在很多文本编辑器里，正则表达式通常被用来检索、替换那些符合某个模式的文本。</p>
    <p>简单来说正则表达式就是完成字符串的增、删、改、查</p>
    <h3>应用场合</h3>
    <ol>
    	<li>数据验证、文本替换、内容检索、过滤内容</li><p></p>
    	<li>可以理解为：执行字符串函数无法完成的特殊的匹配、拆分、
替换功能</li>
    </ol>
    <h2><a>定界符</a></h2>
    <p>正则表达式语句需要由分隔符（定界符）闭合包裹，分隔符可以使任意非  字母数字, 非反斜线, 非空白字符</p>
    <p>经常使用的分隔符是正斜线(/), hash符号(#) 以及取反符号(~)。</p>
    <p>建议使用//做为定界符,因为和js一致</p>
    <h3>实例</h3>
    <pre><code><?php echo htmlspecialchars('
<?php
	$preg= "/xuebingsi/";
	$c = preg_match($preg,"学并思网址xuebingsi.com");
	echo $c;
?>') ?></code></pre>
	<h2><a>原子(元字符)</a></h2>
	<p>原子是正则表达式中的最小的元素，包括英文、标点符号等</p>
	<h3>原子构成方式</h3>
	<ol>
		<li>普通字符是编写正则表达式时最常见的原子了，包括所有的大写和小写字母字符、所有数字等</li><p></p>
		<li>一些特殊字符和元字符作为原子,统统使用<code>"\"</code>转义字符进行转义即可。</li><p></p>
		<li>在正则表达式中可以直接使用一些系统提供的代表范围的原子，如下面的表格所示：</li>
	</ol>
	<table class="jbborder">
	    <tbody>
	        <tr>
	            <td>
	                代表范围的原子
	            </td>
	            <td>
	                &nbsp;说明
	            </td>
	            <td>
	                &nbsp;自定义原子表示法
	            </td>
	        </tr>
	        <tr>
	            <td>
	                &nbsp;\d
	            </td>
	            <td>
	                &nbsp;表示任意一个十进制的数字
	            </td>
	            <td>
	                &nbsp;[0-9]
	            </td>
	        </tr>
	        <tr>
	            <td>
	                &nbsp;\D
	            </td>
	            <td>
	                &nbsp;表示任意一个除数字这外的字符
	            </td>
	            <td>
	                &nbsp;[^0-9]
	            </td>
	        </tr>
	        <tr>
	            <td>
	                &nbsp;\s
	            </td>
	            <td>
	                &nbsp;表示任意一个空白字符，空格、\n\r\t\f
	            </td>
	            <td>
	                &nbsp;[\n\r\t\f ]
	            </td>
	        </tr>
	        <tr>
	            <td>
	                &nbsp;\S
	            </td>
	            <td>
	                &nbsp;表示任意一个非空白
	            </td>
	            <td>
	                &nbsp;[^\n\r\t\f ]
	            </td>
	        </tr>
	        <tr>
	            <td>
	                &nbsp;\w
	            </td>
	            <td>
	                &nbsp;表示任意一个字 a-zA-Z0-9_
	            </td>
	            <td>
	                &nbsp;[a-zA-Z0-9_]
	            </td>
	        </tr>
	        <tr>
	            <td>
	                &nbsp;\W
	            </td>
	            <td>
	                &nbsp;表示任意一个非字，除了a-zA-Z0-9_以外的任意一个字符
	            </td>
	            <td>
	                &nbsp;[^a-zA-Z0-9_]
	            </td>
	        </tr>
	    </tbody>
	</table>
	<h2><a>自定义原子表([])作为原子</a></h2>
	<p>在一组字符中匹配某个元字符，在正则表达式中通过元字符表来完成，就  是放到[..](方括号)中</p>
	<table class="dataintable">
	  <tbody><tr>
	    <th style="width:20%">表达式</th>
	    <th>描述</th>
	  </tr>

	  <tr>
	    <td><a >[abc]</a></td>
	    <td>查找方括号之间的任何字符。</td>
	  </tr>
	  <tr>
	    <td><a>[^abc]</a></td>
	    <td>查找任何不在方括号之间的字符。</td>
	  </tr>
	  <tr>
	    <td>[0-9]</td>
	    <td>查找任何从 0 至 9 的数字。</td>
	  </tr>
	  <tr>
	    <td>[a-z]</td>
	    <td>查找任何从小写 a 到小写 z 的字符。</td>
	  </tr>
	  <tr>
	    <td>[A-Z]</td>
	    <td>查找任何从大写 A 到大写 Z 的字符。</td>
	  </tr>
	  <tr>
	    <td>[A-z]</td>
	    <td>查找任何从大写 A 到小写 z 的字符。</td>
	  </tr>
		<tr>
	    <td>[adgk]</td>
	    <td>查找给定集合内的任何字符。</td>
	  </tr>
	  <tr>
	    <td>[^adgk]</td>
	    <td>查找给定集合外的任何字符。</td>
	  </tr>
		<tr>
	    <td>(red|blue|green)</td>
	    <td>查找任何指定的选项。</td>
	  </tr>
	  </tr>
		<tr>
	    <td>.</td>
	    <td>点在正则中表示除换行符外的任意字符</td>
	  </tr>
	</tbody></table>
	<h3>实例</h3>
    <pre><code><?php echo htmlspecialchars('
<?php
	$str ="1.jpg@2.jpg@3.jpg#4.jpg";
	$preg="/[@#]/";
	$c = preg_match($preg,$str);  
	var_dump($c);
?>') ?></code></pre>
	<h2><a>原子组(元字符组)</a></h2>
	<p>如果一次要匹配多个元子，可以通过元子组完成</p>
	<p>原子组不原子表的差别在于原子组一次匹配多个元子，而原子表则  是匹配成功表中的一个元字符就可以</p>
	<p>元字符组用（）表示</p>
	<p>组号是从
左到右计数的调用时： 这种方式我们叫做反向引用</p>
	<h3>实例</h3>
	<pre><code><?php echo htmlspecialchars('
<?php
	$str = "学并思官网www.xuebingsiwang.com学并思论坛  http://bbs.xuebingsiwang.com我在学并思的网名叫xuebingsi";
	$preg = "/(xuebingsi)wang/is";
	$newStr= preg_replace($preg,"<span  style=\'color:#f00\'>$1</span>wang",$str);
	echo $newStr;

?>') ?></code></pre>
	<h2><a>选择修释符</a></h2>
	<p> | 这个符号带表选择修释符，也就是 | 左右两侧有一个匹配到就可以</p>
	<h3>实例</h3>
	<pre><code><?php echo htmlspecialchars('
<?php
	$str = "http://www.baidu.com不新浪网http://www.sina.com";
	$preg = "/\.(baidu|sina)\./";
	$new_str = preg_replace($preg,\'.xuebingsiwang.\',$str);
?>') ?></code></pre>
	<h2><a>重复匹配(量词)</a></h2>
	<p>如果要重复匹配一些内容时我们要使用重复匹配修饰符，包括以下几种</p>
	<table class="dataintable">
	    <tbody>
	        <tr>
	            <th style="width:20%">
	                量词
	            </th>
	            <th>
	                描述
	            </th>
	        </tr>
	        <tr>
	            <td>
	                <a >
	                    *
	                </a>
	            </td>
	            <td>
	                重复零次或更多次
	            </td>
	        </tr>
	        <tr>
	            <td>
	                <a >
	                    +
	                </a>
	            </td>
	            <td>
	                重复一次或更多次
	            </td>
	        </tr>
	         <tr>
	            <td>
	                <a >
	                    ?
	                </a>
	            </td>
	            <td>
	                重复零次或一次
	            </td>
	        </tr>
	         <tr>
	            <td>
	                <a >
	                    {n}
	                </a>
	            </td>
	            <td>
	                重复n次
	            </td>
	        </tr>
	         <tr>
	            <td>
	                <a >
	                    {n,}
	                </a>
	            </td>
	            <td>
	                重复n次或更多次 
	            </td>
	        </tr>
	        <tr>
	            <td>
	                <a >
	                    {n,m}
	                </a>
	            </td>
	            <td>
	                重复n到m次
	            </td>
	        </tr>
	    </tbody>
	</table>
	<p>因为正则最小单位是元字符，而我们很少只匹配一个元字符如a、b所以基  本上重复匹配在每条正则语句中都是必用到的内容</p>
	<h2><a>禁止重复匹配</a></h2>
	<p>正则表达式在进行重复匹配时，默认是贪婪匹配模式，也就是说会尽量匹配更多内容，但是有的时候我们并不希望他匹配更多内容，这时可以通过?  进行修饰来禁止重复匹配</p>
	<table class="dataintable">
	    <tbody>
	        <tr>
	            <th style="width:20%">
	                量词
	            </th>
	            <th>
	                描述
	            </th>
	        </tr>
	        <tr>
	            <td>
	                <a >
	                    *?
	                </a>
	            </td>
	            <td>
	                重复零次或更多次,但尽可能少重复
	            </td>
	        </tr>
	        <tr>
	            <td>
	                <a >
	                    +?
	                </a>
	            </td>
	            <td>
	                重复一次或更多次,但尽可能少重复
	            </td>
	        </tr>
	         <tr>
	            <td>
	                <a >
	                    ??
	                </a>
	            </td>
	            <td>
	                重复零次或一次,但尽可能少重复
	            </td>
	        </tr>
	         <tr>
	            <td>
	                <a >
	                    {n}?
	                </a>
	            </td>
	            <td>
	                重复n次,但尽可能少重复
	            </td>
	        </tr>
	         <tr>
	            <td>
	                <a >
	                    {n,}?
	                </a>
	            </td>
	            <td>
	                重复n次或更多次,但尽可能少重复 
	            </td>
	        </tr>
	        <tr>
	            <td>
	                <a >
	                    {n,m}?
	                </a>
	            </td>
	            <td>
	                重复n到m次,但尽可能少重复
	            </td>
	        </tr>
	    </tbody>
	</table>
	<h2><a>匹配字符边界</a></h2>
	<p>如果想匹配字符的边界，边界包括空格、标点符号、换行等，可以使用正则表达式的匹配字符边界修饰符如下</p>
	<h3>匹配字符串边界</h3>
	<ol>
		<li><code>^</code>匹配字符串的开始</li><p></p>
		<li><code>$</code>匹配字符串的结束，忽略换行符\n</li>
	</ol>
	<h2><a>模式修正符</a></h2>
	<p>正则表达式在执行时会按他们的默认执行方式进行，但有时候默认的处理方式总不能满足我们的需求，所以可以使用模式修正符更改默认方式。</p>
	<ol>
		<li><code>i</code>不区分大小写字母的匹配</li><p></p>
		<li><code>s</code>将字符串视为单行，换行符做普通字符看待，使“.”  匹配任何字符</li>
	</ol>
	<h2><a>常用正则操作函数</a></h2>
	<h3>preg_match()方法</h3>
	<p>执行一个正则表达式匹配</p>
	<h4>语法：</h4>
	<pre><code><?php echo htmlspecialchars('
int preg_match ($pattern , $subject) ') ?></code></pre>
	<h3>preg_match_all()方法</h3>
	<p>执行一个全局正则表达式匹配</p>
	<h4>语法：</h4>
	<pre><code><?php echo htmlspecialchars('
int preg_match_all ($pattern ,$subject [, array &$matches])') ?></code></pre>
	<p><code>matches</code>多维数组，作为输出参数输出所有匹配结果, 数组排序通过flags指定。</p>
	<h3>preg_split()方法</h3>
	<p> 通过一个正则表达式分隔字符串</p>
	<h4>语法：</h4>
	<pre><code><?php echo htmlspecialchars('
array preg_split ( string $pattern , string $subject)')?></code></pre>
	<h3>preg_replace()方法</h3>
	<p> 执行一个正则表达式的搜索和替换</p>
	<h4>语法：</h4>
	<pre><code><?php echo htmlspecialchars('
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject)')?></code></pre>
	<h3>作业</h3>
	<blockquote>
		<ol>
			<li>搞懂邮箱，手机，身份证，网址等等正则</li>
			<li>采集拉勾网招聘职位数据</li>
		</ol>
	</blockquote>
</article>